package cn.xingzhe.monster.user.application.service;

import cn.xingzhe.monster.user.application.dto.UserDTO;

import java.util.List;

/**
 * 用户应用服务接口
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
public interface UserApplicationService {

    /**
     * 邮箱注册
     *
     * @param email    邮箱
     * @param password 密码
     * @param captcha  验证码
     * @return 用户DTO
     */
    UserDTO registerByEmail(String email, String password, String captcha);

    /**
     * 手机号注册
     *
     * @param phone    手机号
     * @param password 密码
     * @param captcha  验证码
     * @return 用户DTO
     */
    UserDTO registerByPhone(String phone, String password, String captcha);

    /**
     * 用户名密码登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户DTO
     */
    UserDTO loginByUsername(String username, String password);

    /**
     * 邮箱登录
     *
     * @param email   邮箱
     * @param captcha 验证码
     * @return 用户DTO
     */
    UserDTO loginByEmail(String email, String captcha);

    /**
     * 手机号登录
     *
     * @param phone   手机号
     * @param captcha 验证码
     * @return 用户DTO
     */
    UserDTO loginByPhone(String phone, String captcha);

    /**
     * 获取用户所有权限
     *
     * @param userId 用户ID
     * @return 权限代码列表
     */
    List<String> getUserPermissions(String userId);

    /**
     * 检查用户是否有指定权限
     *
     * @param userId         用户ID
     * @param permissionCode 权限代码
     * @return 是否有权限
     */
    boolean checkPermission(String userId, String permissionCode);

    /**
     * 根据ID获取用户信息
     *
     * @param userId 用户ID
     * @return 用户DTO
     */
    UserDTO getUserById(String userId);

    /**
     * 获取当前登录用户的Token
     *
     * @return 认证Token，如果未登录则返回null
     */
    String getCurrentToken();

    /**
     * 获取当前登录用户的ID
     *
     * @return 用户ID，如果未登录则返回null
     */
    String getCurrentUserId();

    /**
     * 退出登录
     */
    void logout();
}

